﻿using System.Collections.Generic;

namespace Borg
{
    public interface ITypeStoreModifier
    {
        TypeBuilder TypeBuilder { get; }

        bool CanAdd(Contract contract, out LogArgs log);
        bool CanAdd(Contract contract, IEnumerable<Contract> pendingContracts, out LogArgs log);

        bool CanAdd(Plugin plugin, out LogArgs log);
        bool CanAdd(Plugin plugin, IEnumerable<Plugin> pendingPlugins, out LogArgs log);

        bool CanRemove(Contract contract, out LogArgs log);
        bool CanRemove(Plugin plugin, out LogArgs log);
        
        void Add(Contract contract);
        void Add(Plugin plugin);
        void Add(IEnumerable<Contract> contracts, IEnumerable<Plugin> plugins);
        
        void Remove(Contract contract);
        void Remove(Plugin plugin);
        void Remove(IEnumerable<Contract> contracts, IEnumerable<Plugin> plugins);
    }
}
